# Librerie di utility

require 'csv'
require 'utente'

# Trasforma una lista di utenti in una matrice di rating
# senza contesto: 0
# contesto 1: 1
# contesto 2: 2
# contesto 3: 3
class Util
def Util.users_to_matrix(utenti, contesto)
  
  matrix = []

  case contesto
  when 0
    utenti.each{|x| matrix.push(x.no_context)}
  when 1
    utenti.each{|x| matrix.push(x.context_1)}
  when 2
    utenti.each{|x| matrix.push(x.context_2)}
  when 3
    utenti.each{|x| matrix.push(x.context_3)}
  end

  return matrix
end

# Trasforma un vettore di stringhe in un vettore di interi
def Util.copia_vetN(vet)
  tmp = []
  (0..vet.size-1).each{|i| tmp.push(vet[i].to_i)}
  return tmp
end

# Estrae i dati dal CSV e li parsa
def Util.loadFile(filename)
  @file= File.new(filename,'r')
  return @file
end
def Util.parser()
  local_directory= Dir.pwd + "/MatrixToVectorLast.csv"
  r=[]
  c= 0
  utenti = []
  CSV.open(local_directory,'r',',') do |row|
    if c==0 then
      i=9
      r.push(row[0])
      while i<59 do
        utente= Utente.new((row[i]).to_i)
        utenti.push(utente)
        i= i+1
      end
    elsif c>0 and c<61
      i=9
      r.push(row[0])
      for u in utenti
        if u.no_context == nil
          u.no_context = Array.new()
        end
        u.no_context.push((row[i]).to_i)
        i=i+1
      end
   elsif c>60 and c<121
      i=9
      r.push(row[0])
      for u in utenti
        if u.context_1 == nil
          u.context_1 = Array.new()
        end
        u.context_1.push((row[i]).to_i)
        i= i+1
      end
   elsif c>120 and c<181
      i=9
      r.push(row[0])
      for u in utenti
        if u.context_2 == nil
          u.context_2 = Array.new()
        end
        u.context_2.push((row[i]).to_i)
        i= i+1
      end
   elsif c>180 and c<241
     i=9
     r.push(row[0])
     for u in utenti
       if u.context_3 == nil
         u.context_3 = Array.new()
       end
       u.context_3.push((row[i]).to_i)
       i= i+1
     end
    end
    c=c+1
  end
  return [utenti.compact(),r]
end

# Trasforma un'array in CSV
def Util.utenti2csv (name, valori)

    path= "C:/"+name+".csv"
 outfile = File.open(path, 'wb')
  CSV::Writer.generate(outfile) do |csv|
   csv<<[("Pseudo Binario (=);")]

    (0..valori[0].size-1).each{|j|
stringa=""
(0..valori.size-1).each{|i|

    stringa= stringa+valori[i][j].to_s+";"
  }

csv<<[(stringa)]

}

  end
  outfile.close


end
end
